/** 工具 - 时间处理 */
import moment from 'moment'

/**
 * 根据输入日期计算距今天数
 *
 * @param date 日期
 * @return number
 */
// 根据输入日期计算距今天数
export function computeDaysFromNow(date) {
	const now = new Date()
	const input = new Date(date)
	const diff = now - input
	// 向上取整
	return Math.ceil(diff / (24 * 3600 * 1000))
}

/**
 * 将时间转换为 `几秒前`、`几分钟前`、`几小时前`、`几天前`
 * @param param 当前时间，new Date() 格式或者字符串时间格式
 * @param format 需要转换的时间格式字符串
 * @description param 10秒：  10 * 1000
 * @description param 1分：   60 * 1000
 * @description param 1小时： 60 * 60 * 1000
 * @description param 24小时：60 * 60 * 24 * 1000
 * @description param 3天：   60 * 60* 24 * 1000 * 3
 * @returns 返回拼接后的时间字符串
 */
export function formatPast(param, format = 'YYYY-MM-DD') {
	// 传入格式处理、存储转换值
	let t, s
	// 获取js 时间戳
	let time = new Date().getTime()
	// 是否是对象
	typeof param === 'string' || 'object'
		? (t = new Date(param).getTime())
		: (t = param)
	// 当前时间戳 - 传入时间戳
	time = Number.parseInt(`${time - t}`)
	if (time < 10000) {
		// 10秒内
		return '刚刚'
	} else if (time < 60000 && time >= 10000) {
		// 超过10秒少于1分钟内
		s = Math.floor(time / 1000)
		return `${s}秒前`
	} else if (time < 3600000 && time >= 60000) {
		// 超过1分钟少于1小时
		s = Math.floor(time / 60000)
		return `${s}分钟前`
	} else if (time < 86400000 && time >= 3600000) {
		// 超过1小时少于24小时
		s = Math.floor(time / 3600000)
		return `${s}小时前`
	} else if (time < 259200000 && time >= 86400000) {
		// 超过1天少于3天内
		s = Math.floor(time / 86400000)
		return `${s}天前`
	} else {
		// 超过3天
		let date = typeof param === 'string' || 'object' ? new Date(param) : param
		return formatMoment(date, format)
	}
}

/**
 * moment时间格式化（常规）
 *
 * @param time 输入的时间
 * @param format 格式化规则
 * @param hideThisYear 隐藏年分（今年时）
 * @returns
 */
export function formatMoment(
	time,
	format = 'YYYY-MM-DD HH:mm',
	hideThisYear = true
) {
	if (!time) {
		return '-'
	}
	// 如果是今年则隐藏年份
	if (hideThisYear && moment(time).year() === moment().year()) {
		format = format.replace('YYYY-', '')
	}
	return moment(time).locale('zh-cn').format(format)
}

/**
 * moment时间格式化（年月日）
 *
 * @param time 输入的时间
 * @param empty  为空时内容
 * @returns
 */
export function formatDate(time, empty = '') {
	if (!time) {
		return empty
	}
	return moment(time).locale('zh-cn').format('YYYY-MM-DD')
}
